#ifndef _RANDOM_ISAAC_H_
#define _RANDOM_ISAAC_H_

#include "Random.h"
#include "isaac.hpp"

class Random_isaac : public Random
{
public:
    Random_isaac();
    virtual ~Random_isaac();
    virtual unsigned long nextInt(unsigned long m = 0);

private:
    void resetSeeds();
    bool isDiscard(int number, unsigned int m);

    issac_8_32_t  _issac;
    struct issac_8_32_t::randctx _randctx;
    long long counter;
};

#endif /* _RANDOM_ISAAC_H_ */
